/******************************************************************************
 * Student Name: Ofri Keidar
 * Exercise Name: Ex2
 * File Description: Class Student's interface
 ******************************************************************************/

#ifndef STUDENT_H_
#define STUDENT_H_

#include <string>
using namespace std;

class Student {

private:
	const int m_id; // student's id
	string m_name; // student's name

	/***************************************************************************************
	 * function name: Student(const Student& student)
	 * The Input: Student to be copied
	 * The output: None
	 * The Function operation: The copy constructor is private and an empty-implementation
	 * 						   because student objects should not be sent to functions
	 * 						   by value
	 ***************************************************************************************/
	Student(const Student& student): m_id(student.getID()) {}

public:
	/***************************************************************************************
	 * function name: Student(const int id, const string name)
	 * The Input: Id and name for the new student
	 * The output: None
	 * The Function operation: Creates a new student with given attributes
	 ***************************************************************************************/
	Student(const int id, const string name);

	/****************************************************************************************
	 * function name: ~Student()
	 * The Input: None
	 * The output: None
	 * The Function operation: Destructs student object
	 ***************************************************************************************/
	~Student();

	/****************************************************************************************
	 * function name: getID()
	 * The Input: None
	 * The output: Student's id
	 * The Function operation: Returns id attribute of student, without changing the object
	 ****************************************************************************************/
	int getID() const {return m_id;}

	/****************************************************************************************
	 * function name: getStudentName()
	 * The Input: None
	 * The output: Student's name
	 * The Function operation: Returns name attribute of student, without changing the object
	 ****************************************************************************************/
	string getStudentName() const {return m_name;}

	/****************************************************************************************
	 * function name: setStudentName(const string newName)
	 * The Input: New name for the student
	 * The output: None
	 * The Function operation: Sets student's name attribute according to given value.
	 * 						   The method does not change given name
	 ****************************************************************************************/
	void setStudentName(const string newName) {m_name = newName;}
};

#endif
